export default {
    state: {

    },
    /**
     * Vuex 允许我们在 store 中定义“getter”（可以认为是 store 的计算属性）。就像计算属性一样，getter 的返回值会根据它的依赖被缓存起来，且只有当它的依赖值发生了改变才会被重新计算。
     * Getter 接受 state 作为其第一个参数：
     */
    getters: {

    },
    actions: {
        /**
        * 登陆
        * @param {Object} param0 context
        * @param {Object} param1 { vue, username, password }
        */
        d2adminLogin({ state, commit, rootState }, { vm, username, password }) {
            // 开始请求登录接口
            vm.$axios({
                method: 'post',
                url: '/login',
                data: {
                    username,
                    password
                }
            })
                .then(res => {
                    // 设置 cookie 一定要存 uuid 和 token 两个 cookie
                    // 整个系统依赖这两个数据进行校验和存储
                    // uuid 是用户身份唯一标识 用户注册的时候确定 并且不可改变 不可重复
                    // token 代表用户当前登录状态 建议在网络请求中携带 token，如有必要 token 需要定时更新，默认保存一天
                    util.cookies.set('uuid', res.data.uuid)
                    util.cookies.set('token', res.data.token)
                    // 设置 vuex 用户信息
                    commit('d2adminUserInfoSet', {
                        name: res.data.name
                    })
                    // 用户登陆后从数据库加载一系列的设置
                    commit('d2adminLoginSuccessLoad')
                    // 跳转路由
                    vm.$router.push({
                        name: 'index'
                    })
                })
                .catch(err => {
                    console.group('登陆结果')
                    console.log('err: ', err)
                    console.groupEnd()
                })
        },
        /**
         * 注销用户并返回登陆页面
         * @param {Object} param0 context
         * @param {Object} confirm need confirm ?
         */
        d2adminLogout({ state, commit, rootState }, { vm, confirm }) {
            /**
             * @description 注销
             */
            function logout() {
                // 删除cookie
                util.cookies.remove('token')
                util.cookies.remove('uuid')
                // 跳转路由
                vm.$router.push({
                    name: 'login'
                })
            }
            // 判断是否需要确认
            if (confirm) {
                commit('d2adminGrayModeSet', true)
                vm.$confirm('注销当前账户吗?  打开的标签页和用户设置将会被保存。', '确认操作', {
                    confirmButtonText: '确定注销',
                    cancelButtonText: '放弃',
                    type: 'warning'
                })
                    .then(() => {
                        commit('d2adminGrayModeSet', false)
                        logout()
                    })
                    .catch(() => {
                        commit('d2adminGrayModeSet', false)
                        vm.$message('放弃注销用户')
                    })
            } else {
                logout()
            }
        }

    },
    mutations: {
        /**
         * @description 设置用户名
         * @class userInfo
         * @param {vuex state} state vuex state
         * @param {String} userInfo userInfo
         */
        d2adminUserInfoSet(state, userInfo) {
            state.userInfo = userInfo
            this.commit('d2adminUtilVuex2DbByUuid', 'userInfo')
        },

    }
}